package com.gzj.environment.module.collectData.util;

import cn.hutool.core.util.StrUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ChannelUtils {

    /**
     * 给客户端信道发送数据
     * @param message 需要发送的数据
     * @param ctx 客户端信道
     * @param mark 标识（打印的日志里有所体现，和主题逻辑无关）
     */
    public static void writeToClient(final String message, ChannelHandlerContext ctx, final String mark) {
        try {
            ByteBuf buf = Unpooled.buffer(); // netty需要用ByteBuf传输
            buf.writeBytes(ConvertUtils.hexString2Bytes(message)); // 对接需要16进制
            ctx.writeAndFlush(buf).addListener(new ChannelFutureListener() {
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
                    if (future.isSuccess()) {
                        log.info("【{}】给客户端{}发送的命令成功", mark, ctx.channel().remoteAddress());
                    } else {
                        log.info("【{}】给客户端{}发送的命令失败", mark, ctx.channel().remoteAddress());
                    }
                }
            });
        } catch (Exception e) {
            log.error("【{}】给客户端{}发送命令异常：", mark, ctx.channel().remoteAddress(), e);
        }
    }
}
